PROCEDURE TForm4.TestShlWAPISHUnicodeToAnsi(Sender : TObject);
//Support for function as ordinal 217 under Win 98 SE (with IE 5.0) confirmed !!!
//Support for function as ordinal 217 under NT 4.0 with IE 5.0 confirmed !!!
VAR srcwcharbuf : WideString;
VAR srcstrlen : INTEGER;
VAR destansibuf : ARRAY[0..64] OF CHAR;
VAR destbufsize : INTEGER;
VAR apiretval : INTEGER;
VAR errorcode : INTEGER;
VAR newinfoline : STRING;
BEGIN
srcwcharbuf := '';
srcstrlen := 0;
FillChar(destansibuf, Length(destansibuf), #0);
destbufsize := 0;
apiretval := 0;
errorcode := 0; //0 = NO_ERROR
newinfoline := '';
srcwcharbuf := 'Hello Unicode to ANSI World !';
srcstrlen := Length(srcwcharbuf);
destbufsize := Length(destansibuf);
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" returned ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), destansibuf, destbufsize);
IF apiretval > 0 THEN
newinfoline := newinfoline + IntToStr(apiretval) + ' dest buffer : "' + destansibuf + '"'
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
//Dest buffer length parameter set to 23 (too short by 6 character)
FillChar(destansibuf, SizeOf(destansibuf), #0);
destbufsize := 23;
apiretval := 0;
newinfoline := '';
errorcode := 0;
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" (length: ' + IntToStr(srcstrlen) +
') returned : ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), destansibuf, destbufsize);
IF apiretval > 0 THEN
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' and in the dest buffer : "' + destansibuf + '"';
Memo1.Lines.Add(newinfoline);
newinfoline := 'and GetLastError returned : ' + IntToStr(errorcode);
END
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
//Dest buffer length parameter set to 2 (too short by 27 characters)
FillChar(destansibuf, SizeOf(destansibuf), #0);
destbufsize := 2;
apiretval := 0;
newinfoline := '';
errorcode := 0;
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" (length: ' + IntToStr(srcstrlen) +
') returned : ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), destansibuf, destbufsize);
IF apiretval > 0 THEN
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' and in the dest buffer : "' + destansibuf + '"';
Memo1.Lines.Add(newinfoline);
newinfoline := 'and GetLastError returned : ' + IntToStr(errorcode);
END
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
//Dest buffer length parameter set to 1 (too short by 28 characters)
FillChar(destansibuf, SizeOf(destansibuf), #0);
destbufsize := 1;
apiretval := 0;
newinfoline := '';
errorcode := 0;
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" (length: ' + IntToStr(srcstrlen) +
') returned : ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), destansibuf, destbufsize);
IF apiretval > 0 THEN
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' and in the dest buffer : "' + destansibuf + '"';
Memo1.Lines.Add(newinfoline);
newinfoline := 'and GetLastError returned : ' + IntToStr(errorcode);
END
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
//Dest buffer length parameter set to 0
FillChar(destansibuf, SizeOf(destansibuf), #0);
destbufsize := 0;
apiretval := 0;
newinfoline := '';
errorcode := 0;
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" (length: ' + IntToStr(srcstrlen) +
') returned : ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), destansibuf, destbufsize);
IF apiretval > 0 THEN
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' and in the dest buffer : "' + destansibuf + '"';
Memo1.Lines.Add(newinfoline);
newinfoline := 'and GetLastError returned : ' + IntToStr(errorcode);
END
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
//No dest buffer (pointer param set to NIL)
//and buffer length parameter set to 0
FillChar(destansibuf, SizeOf(destansibuf), #0);
destbufsize := 0;
apiretval := 0;
newinfoline := '';
errorcode := 0;
newinfoline := 'SHUnicodeToAnsi called with source string "' + srcwcharbuf + '" (length: ' + IntToStr(srcstrlen) +
') returned : ';
SetLastError(NO_ERROR);
apiretval := SHUnicodeToAnsi(PWChar(srcwcharbuf), NIL, 0);
IF apiretval > 0 THEN
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' and in the dest buffer : "' + destansibuf + '"';
Memo1.Lines.Add(newinfoline);
newinfoline := 'and GetLastError returned : ' + IntToStr(errorcode);
END
ELSE
BEGIN
errorcode := INTEGER(GetLastError());
newinfoline := newinfoline + IntToStr(apiretval) + ' (the function call FAILED !), GetLastError returned : ' +
IntToStr(errorcode);
END;
Memo1.Lines.Add(newinfoline);
Memo1.Lines.Add('');
END; |